package administrador;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;


//Indicaciones
//Se debe configurar el origan ODBC a la hoja de excel llamada: excelDB
//Deberan ser 2 hojas: hoja1=Letras hoja2=Numeros
//Formato de la Cabecera las 2 hoja de Excel:
// codigo	categoria	nombre	descripcion	cantidad	precioCost	precioVent
//Antes de Comenzar el cargado he tenido problemas con la creacion de productos
//que tienen codigos solo numeros asi que le he creado 2 hojas de calcula de excel 2003
//La primera hoja es Letras y la segunda es Numeros de esta manera se deben separar
//Los productos en prodcutos con codigos en Int y productos con codigos en String.
//Ojo No se puede borrar una fila solamente con Delete esta se debe Eliminar completamente
//La Fila.

public class TestAccessExcel {
Conexion c=new Conexion();
Random rnd = new Random();

  public TestAccessExcel() {
    //Establesco la Conexion:
     c.conectarBase();  
    //System.out.println("Me conecto a la baseMYSQL"); 
      
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    int i=0;
    try {
      conn = getConnection();
      stmt = conn.createStatement();
      
      
      //Busco codigos que sean Letras:
      String excelQuery = "select * from [Letras$]";
      rs = stmt.executeQuery(excelQuery);
     // obtenerFilas(rs);
      
      while (rs.next()) {
          
        String codigo=rs.getString(1);
        int codigoCat=rs.getInt(2);
        String nombre=rs.getString(3).toString();
        String descripcion=rs.getString(4).toString();
        int cantidad=rs.getInt(5);
        double precioCost=rs.getDouble(6);
        double precioVent=rs.getDouble(7);
        
        int ranking=0;
        int cantMin=5;
        
       //System.out.println(" Codigo:\t"+codigo+"| categoria:\t"+codigoCat+"\t|nombre:\t"+nombre+" \t|Descripcion:\t"+descripcion+" \t|Cant:\t"+cantidad+" \t|PrecioCost:\t"+precioCost+" \t|PrecioVent:\t"+precioVent);
        
         ResultSet rConsult=c.consultarBase("select * from producto where cod_producto like '"+codigo+"'");
        //System.out.println("\n=========================================================================");
                if(obtenerFilas(rConsult)>0){
               //System.out.println("\n"+"Si existe esta Producto: "+codigo);
               //System.out.println(" => no creo el Producto:");
                rConsult.beforeFirst();
                rConsult.next();
                int cantAnt=rConsult.getInt(5);
                int StockTotal=cantidad;
               //System.out.println("La cant Antigua es: "+cantAnt+"\tLa cantidad Nueva es:"+StockTotal);
               // c.actualizarBase("update producto set precio_normal="+precioVent+", ranking="+ranking+", precio_costo="+precioCost+" where cod_producto like '"+codigo+"'");
               // c.actualizarBase("update itm_bodega set cantidad="+StockTotal+" where cod_producto like '"+codigo+"'");
                }else
                {
               //System.out.println("\n"+"No existe esta Producto: "+codigo);
               //System.out.println(" => Creo la Producto:");
                String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
        
                c.insertarDatos("INSERT INTO producto values('"+codigo+"',"+codigoCat+",'"+nombre+"','',"+cantidad+","+precioVent+","+ranking+","+precioCost+",'"+fecha+"')");
                c.insertarDatos("INSERT INTO itm_bodega values("+1+",'"+codigo+"',"+cantidad+","+cantMin+")");
       
       
                }
        
        
        
        i++;
      }
      
      
      
      //Busco Codigos que sean numeros:
      excelQuery = "select * from [Numeros$]";
      rs = stmt.executeQuery(excelQuery);
     //System.out.println("LLega hasta aqui");
       while (rs.next()) {
          
        String codigo=String.valueOf(rs.getInt(1));
        int codigoCat=rs.getInt(2);
        String nombre=rs.getString(3).toString();
        String descripcion=rs.getString(4).toString();
        int cantidad=rs.getInt(5);
        double precioCost=rs.getDouble(6);
        double precioVent=rs.getDouble(7);
        
        int ranking=0;
        int cantMin=5;
        
       //System.out.println(" Codigo:\t"+codigo+"| categoria:\t"+codigoCat+"\t|nombre:\t"+nombre+" \t|Descripcion:\t"+descripcion+" \t|Cant:\t"+cantidad+" \t|PrecioCost:\t"+precioCost+" \t|PrecioVent:\t"+precioVent);
        
         ResultSet rConsult=c.consultarBase("select * from producto where cod_producto like '"+codigo+"'");
        //System.out.println("\n=========================================================================");
                if(obtenerFilas(rConsult)>0){
               //System.out.println("\n"+"Si existe esta Producto: "+codigo);
               //System.out.println(" => no creo el Producto:");
                rConsult.beforeFirst();
                rConsult.next();
                int cantAnt=rConsult.getInt(5);
                
                //Se debe especificar si la cantidad del producto se sumara o se reemplazara en la siguiente
                //linea: Para la suma:(StockTotal=cantAnt+cantidad;) o (StockTotal=cantidad;).
                int StockTotal=cantidad;
               //System.out.println("La cant Antigua es: "+cantAnt+"\tLa cantidad Nueva es:"+StockTotal);
               // c.actualizarBase("update producto set precio_normal="+precioVent+", ranking="+ranking+", precio_costo="+precioCost+" where cod_producto like '"+codigo+"'");
               // c.actualizarBase("update itm_bodega set cantidad="+StockTotal+" where cod_producto like '"+codigo+"'");
                }else
                {
               //System.out.println("\n"+"No existe esta Producto: "+codigo);
               //System.out.println(" => Creo la Producto:");
                c.insertarDatos("INSERT INTO producto values('"+codigo+"',"+codigoCat+",'"+nombre+"','',"+cantidad+","+precioVent+","+ranking+","+precioCost+")");
                c.insertarDatos("INSERT INTO itm_bodega values("+1+",'"+codigo+"',"+cantidad+","+cantMin+")");
       
       
                }
        
        
        
        i++;
      }
      
      
        //Inserto los registros del cliente en la base:
        
       
        //Cierro la Conexion:
        c.cerrarConexion();
        
    } catch (Exception e) {
      System.err.println(e.getMessage());
    } finally {
      try {
        rs.close();
        stmt.close();
        conn.close();

      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
    
     public int obtenerFilas(ResultSet r){
    int filas=0;    
        try{
            r.last();
            filas=r.getRow();
           //System.out.println("El numero de Filas"+filas);
            
        }catch(SQLException sqle){
            //System.out.println("Error al Obtener numero de Filas");
            System.err.println(sqle);
        }
       return filas;
    }
    
    public static Connection getConnection() throws Exception {
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:excelDB";
    Class.forName(driver);
    return DriverManager.getConnection(url);
  }
    
    public static void main(String[] args)
    {
    TestAccessExcel tae=new TestAccessExcel();
    }

}
